home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / speak / src / muno.bas < prev    next >
BASIC Source File  |  1993-07-08  |  5KB  |  139 lines

  1. 1000 '==============================================================
  2. 1010 '  おしゃべり 人工無能!
  3. 1020 '==============================================================
  4. 1030 DEFINT A-Z
  5. 1035 MAX=1000:RANDOMIZE TIME
  6. 1045 DIM WORD$(50),BUNSYO$(MAX),TANGO$(MAX),KANKEI(MAX,5)
  7. 1050 SCREEN @0:CONSOLE 2,22,2
  8. 1080 LOCATE 0,0:PRINT "*** おしゃべり人工無能! ***":LOCATE 0,2
  9. 1085 '
  10. 1090 JYOSI$="は,が,の,には,から,より,を,も,ため,に,のは"
  11. 1100 JYOGAI$=JYOSI$+",なんだ,なのだ,のだ,のさ,です,でした,である,だね,だよ"
  12. 1110 JYOGAI$=JYOGAI$+",だぞ,だった,って,され,される,された,されてる,こと"
  13. 1120 JYOGAI$=JYOGAI$+",する,している,してる,させる,させた,します,しましょう"
  14. 1130 GOSUB *読み込み
  15. 1140 '
  16. 2000 '--------------------------------------------------------------
  17. 2010 '  メインルーチン
  18. 2020 '--------------------------------------------------------------
  19. 2030 ENDFLG=0
  20. 2040 ANS$="こんにちは":GOSUB *表示:GOSUB *話聞く
  21. 2050 *MAIN
  22. 2060  GOSUB *文の要素を分析
  23. 2070  GOSUB *答える
  24. 2080  IF ENDFLG=0 THEN *MAIN
  25. 2090 '
  26. 2100 *BYE
  27. 2110  GOSUB *書き込み
  28. 2120  END
  29. 2130 '
  30. 2140 *表示
  31. 2150  COLOR 6:PRINT "わたし:"+ANS$:COLOR 7
  32. 2160  'SPK$=ANS$:GOSUB *おしゃべり
  33. 2170 RETURN
  34. 2180 '
  35. 2190 '--------------------------------------------------------------
  36. 2200 '  対話ルーチン
  37. 2210 '--------------------------------------------------------------
  38. 2220 *話聞く
  39. 2230  PRINT "あなた:";: LINE INPUT MES$
  40. 2240  IF MES$="" THEN ENDFLG=1
  41. 2250 RETURN
  42. 2260 '
  43. 2270 *答える
  44. 2280  IF MES$="" THEN RETURN
  45. 2290  IF RND>.9! AND SHUGO$<>"" THEN OBJ$=SHUGO$:GOTO 2310
  46. 2300  OBJ$=WORD$(INT(RND*WMAX))
  47. 2310  ID=SEARCH(TANGO$,OBJ$)
  48. 2320  IF ID=-1 AND NEST_FLG=0 THEN *質問
  49. 2330  IF ID=-1 AND NEST_FLG=1 ANS$=MES$:GOTO 2360
  50. 2340  ANS$=BUNSYO$(KANKEI(ID,INT(KANKEI(ID,0)*RND+1)))
  51. 2350  IF RND<.4! THEN NEST_FLG=1:MES$=ANS$:GOTO 2370
  52. 2360  GOSUB *表示:GOSUB *話聞く:NEST_FLG=0
  53. 2370 RETURN
  54. 2380 '
  55. 2390 *質問
  56. 2400  ANS$="「"+OBJ$+"」って"
  57. 2410  IF INSTR("る,い",KRIGHT$(OBJ$,1))<>0                                         THEN ANS$=ANS$+"どういうこと?" ELSE ANS$=ANS$+"なに?" 
  58. 2420  GOSUB *表示:GOSUB *話聞く:IF ENDFLG THEN 2470
  59. 2430  TANGO$(T_MAX)=OBJ$:GOSUB *新文登録
  60. 2440 '
  61. 2450  KANKEI(T_MAX,0)=1:KANKEI(T_MAX,1)=ID '答と既存知識を関連付ける
  62. 2460  GOSUB *新文関係登録:T_MAX=T_MAX+1
  63. 2470  RETURN
  64. 2480 '
  65. 2490 *文の要素を分析
  66. 2500  IF MES$="" THEN RETURN
  67. 2510  GOSUB *新文登録:GOSUB *新文関係登録
  68. 2520 '
  69. 2530  WMAX=0                               '文節ごとに切る
  70. 2540  MES0$=AKCNV$(MES$)
  71. 2550  WHILE MES0$<>""
  72. 2560   I=KINSTR(MES0$," "):IF I=0 THEN I=KLEN(MES0$)+1:MES0$=MES0$+" "
  73. 2570   WORD2$(WMAX)=KLEFT$(MES0$,I-1)
  74. 2580   MES0$=KRIGHT$(MES0$,KLEN(MES0$)-I):WMAX=WMAX+1
  75. 2590  WEND
  76. 2600 '
  77. 2610  WCNT=1:SHUGO$=""                     '主語や補語を得る
  78. 2620  WHILE WCNT<WMAX AND SHUGO$=""
  79. 2630   IF INSTR(JYOSI$,WORD2$(WCNT))<>0 THEN SHUGO$=WORD2$(WCNT-1)
  80. 2640   WCNT=WCNT+1
  81. 2650  WEND
  82. 2660 '
  83. 2670  WCNT=0                               '説明のつかない言葉を除外する
  84. 2680  FOR I=0 TO WMAX-1
  85. 2690   IF INSTR(JYOGAI$,WORD2$(I))<>0 OR KLEN(WORD2$(I))=1 THEN 2710
  86. 2700   WORD$(WCNT)=WORD2$(I):WCNT=WCNT+1
  87. 2710  NEXT
  88. 2720  WMAX=WCNT
  89. 2730 RETURN
  90. 2740 '
  91. 2750 *新文登録
  92. 2760  IF NEST_FLG<>0 THEN 2790
  93. 2770   ID=SEARCH(BUNSYO$,MES$)
  94. 2780   IF ID=-1:BUNSYO$(B_MAX)=MES$:ID=B_MAX:B_MAX=B_MAX+1
  95. 2790 RETURN
  96. 2800 '
  97. 2810 *新文関係登録
  98. 2811  IF NEST_FLG<>0 THEN 2880
  99. 2820  FOR I=1 TO T_MAX
  100. 2830   N=KANKEI(I,0)+1
  101. 2840   IF INSTR(MES$,TANGO$(I))=0 OR N>5 THEN 2870
  102. 2850   FOR J=1 TO KANKEI(I,0):DMY(J)=KANKEI(I,J):NEXT
  103. 2860   IF SEARCH(DMY,ID)=-1 THEN KANKEI(I,0)=N:KANKEI(I,N)=ID
  104. 2870  NEXT
  105. 2880 RETURN
  106. 2890 '
  107. 2900 '--------------------------------------------------------------
  108. 2910 '  データの読み書き
  109. 2920 '--------------------------------------------------------------
  110. 2930 *読み込み
  111. 2940  OPEN "I",#1,"SENT.DAT"
  112. 2950   INPUT #1,B_MAX
  113. 2960   FOR I=1 TO B_MAX:INPUT #1,BUNSYO$(I):NEXT
  114. 2970  CLOSE #1
  115. 2980  OPEN "I",#1,"WORD.DAT"
  116. 2990   INPUT #1,T_MAX
  117. 3000   FOR I=1 TO T_MAX
  118. 3010    INPUT #1,TANGO$(I)
  119. 3020    FOR J=0 TO 5
  120. 3030     INPUT #1,KANKEI(I,J)
  121. 3040    NEXT
  122. 3050   NEXT
  123. 3060  CLOSE #1
  124. 3070 RETURN
  125. 3080 '
  126. 3090 *書き込み
  127. 3100  KILL"sent.dat":KILL"word.dat"
  128. 3110  OPEN "O",#1,"SENT.DAT"
  129. 3120   WRITE #1,B_MAX-1
  130. 3130   FOR I=1 TO B_MAX-1:WRITE #1,BUNSYO$(I):NEXT
  131. 3140  CLOSE #1
  132. 3150  OPEN "O",#1,"WORD.DAT"
  133. 3160   WRITE #1,T_MAX-1
  134. 3170   FOR I=1 TO T_MAX-1
  135. 3180    WRITE #1,TANGO$(I),KANKEI(I,0),KANKEI(I,1),KANKEI(I,2),KANKEI(I,3),KANKEI(I,4),KANKEI(I,5)
  136. 3190   NEXT
  137. 3200  CLOSE #1
  138. 3210 RETURN
  139.